<?php
/** @name : bootstrap.php - @author : theerasak.p - @since : 21 �.�. 2554 1:17:47 - @encoding : UTF-8 */
#Bootstrap File
require_once './config.inc.php';
require_once LIBRARIES_PATH.'/exception.library.php';
require_once LIBRARIES_PATH.'/function.library.php';
require_once LIBRARIES_PATH.'/message.library.php';
require_once LIBRARIES_PATH.'/console.library.php';
require_once LIBRARIES_PATH.'/util.library.php';
require_once LIBRARIES_PATH.'/session.library.php';
require_once LIBRARIES_PATH.'/database.library.php';
require_once LIBRARIES_PATH.'/template.library.php';
require_once LIBRARIES_PATH.'/html.library.php';
require_once LIBRARIES_PATH.'/render.library.php';
require_once LIBRARIES_PATH.'/date.library.php';
require_once LIBRARIES_PATH.'/path.library.php';

try
{
	# เปิดการใช้งาน Session
	Session::open();
	# สร้างตัวแปรเพื่อใช้ส่งข้อความเข้า Console สำหรับการ Debug 
	Console::start();
	Console::write("Welcome to KOOK-FRAMEWORK");
		
	if(isset($_POST) || isset($_GET['url']))
	{
		# ตัดสตริงเพื่อระบุเป็น Controller name โดยแปลงให้ตัวแรกเป็นตัวใหญ่
		$var = split('/',$_GET['url']);
		$controller = $var[0];

		if($controller!="exception" && Config::$dbConnect)
		{
			DB::connect();
		}

		# ตัดสตริงเพื่อระบุเป็น Action name และ ตัวแปรจาก get method
		$var = split("!",$var[1]);

		# ระบุตัวแปรแรกให้เป็น Action โดยแปลงให้ตัวแรกเป็นตัวใหญ่
		$action = $var[0];
		
		# ถ้าหากไม่มีการส่งค่า action มาให้ตั้ง action ตั้งต้นเป็น home
		if(empty($action) && !empty($controller)){$action="home";}

		
		
		# ถ้าหากไม่ระบุ Controller และ Action ให้เรียกไปยังหน้า Main
		if(!$controller && !$action)
		{
			require CONTROLLERS_PATH.'/domain.controller.php';
			$domain = new DomainController();
			
			if(!$subDomain)
			{
				$domain->home();
			}
			else if($subDomain && method_exists(new domainController(),$subDomain))
			{
				$domain->$subDomain();
			}
			else
			{
				throw new PageNotFoundException("ไม่พบ Subdomain ที่อ้างมาถึง");
			}
		}
		else
		{
			
			# ตรวจสอบว่าพบไฟล์ Controller รึเปล่า
			if(file_exists(CONTROLLERS_PATH.'/'.$controller.'.controller.php'))
			{
				
				require CONTROLLERS_PATH.'/'.$controller.'.controller.php';
					
				$controllerName = ucfirst($controller)."Controller";
					
				# ตรวจสอบ Class ว่ามีอยู่จริงรึเปล่า
				if(class_exists($controllerName))
				{
					$controller = new $controllerName();
					# ตรวจสอบว่า Action ที่ส่งมามีอยู่จริงรึเปล่า
					if(method_exists($controller,$action))
					{
						# เรียกไปยัง Action ที่ระบุมา
						$controller->$action();
					}
					else
					{
						throw new PageNotFoundException("ไม่พบ Action ที่อ้างมาถึง");
					}
				}
			}
			else
			{
				throw new PageNotFoundException("ไม่พบ Controller หรือไฟล์ ที่อ้างมาถึง");
			}
		}
	}

	DB::disconnect();
}
catch (PageNotFoundException $e)
{
	$e->execute();
}
catch (InstallException $e)
{
	$e->execute();
}

?>